# -*- coding: utf-8 -*-
# Python中默认的编码格式是 ASCII 格式，在没修改编码格式时无法正确打印汉字，所以在读取中文时会报错。

# 这样定义不能校验传入的参数，所以通常要把参数设置为私有变量，在变量名前加下划线:

class Animal(object):
    def __init__(self, height):
        self._height = height


# 然而这样属性在外部就不可读写，这时需要增加get、set方法:           get set 可以限制属性的范围

# class Animal(object):
#     def get_height(self):
#         return self._height
#
#     def set_height(self, value):
#         if not isinstance(value, float):
#             raise ValueError("高度应该是小数")
#         if value < 0 or value > 300:
#             raise ValueError("高度范围是0到300cm")
#         self._height = value
# d = Animal()
# d.set_height(250.9)
# print(d.get_height())


# 但是这样在外部调用时代码很繁琐，在这里用装饰器@property简化get、set方法

# class Animal(object):

#     @property
#     def height(self):
#         return self._height

#     @height.setter
#     def height(self, value):
#         if not isinstance(value, float):
#             raise ValueError("高度应该是小数")
#         if value < 0 or value > 300:
#             raise ValueError("高度范围是0到300cm")
#         self._height = value
#
# d = Animal()
# d.height = 250.9
# print(d.height)